package com.taotao.manage.service;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.taotao.manage.mapper.ContentCategoryMapper;
import com.taotao.manage.pojo.ContentCategory;

/**
 * @Description:内容分类业务层
 * @author:     mingxu
 */
@Service
public class ContentCategoryService extends BaseService<ContentCategory> {

	@SuppressWarnings("unused")
	@Autowired
	private ContentCategoryMapper contentCategoryMapper;

	/**
	 * @Description: 添加内容类目，并修改父节点的isParent=true
	 * @param record
	 * @author mingxu
	 */
	public ContentCategory addContendCategoryAndUpdateParent(ContentCategory record) {

		boolean flag = false;
		try {
			//设置必要的字段
			record.setIsParent(false);
			record.setName(record.getName());
			record.setParentId(record.getParentId());
			record.setSortOrder(1);
			record.setStatus(1);

			//1.添加内容分类
			super.save(record);

			//2.更新父节点的isParentId=true

			//先查询到父节点
			ContentCategory parent = super.queryById(record.getParentId());
			//如果节点isParent=false,则更新父节点的isParent=true
			if (!parent.getIsParent()) {
				parent.setIsParent(true);

				super.updateById(parent);
			}
			flag = true;
		} catch (Exception e) {
			e.printStackTrace();
		}

		if (flag) {
			//添加成功后，把对象返回去
			return record;
		} else {
			return null;
		}
	}

	/**
	 * @Description: 删除当前节点及其子节点
	 * @param parentId
	 * @param id
	 * @author mingxu
	 */
	public void deleteContentCategory(Long parentId, Long id) {

		// 1.删除所有节点

		//创建集合存储要删除的节点
		List<Object> idList = new ArrayList<Object>();

		//获取所有需要删除的子节点,并添加到List容器中
		getSubIds(idList, id);

		//删除节点
		super.deleteByIds("id", idList, ContentCategory.class);

		// 2.判断父节点下是否有子节点，没有就设置isParent=false

		ContentCategory record = new ContentCategory();
		record.setParentId(parentId);
		//查询父节点下的子节点
		List<ContentCategory> list = super.queryListByWhere(record);

		//如果没有子节点，设置isparent
		if (CollectionUtils.isEmpty(list)) {
			record = new ContentCategory();
			record.setIsParent(false);
			record.setId(parentId);

			// 修改父节点属性
			super.updateById(record);
		}
	}

	/**
	 * 获取所有需要删除的子节点 
	 */
	private void getSubIds(List<Object> idList, Long id) {

		//当前节点也要被删除，需要加入集合中
		idList.add(id);

		//查询当前节点下所有子节点
		ContentCategory record = new ContentCategory();
		record.setParentId(id);
		List<ContentCategory> list = super.queryListByWhere(record);

		//如果当前节点下有子节点，则继续查询节点的节点
		if (CollectionUtils.isNotEmpty(list)) {
			//遍历所有子节点，查询子节点的子节点
			for (ContentCategory contentCategory : list) {
				//调用自己
				getSubIds(idList, contentCategory.getId());
			}
		}
	}

}
